/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.pucp.sistemasInf.controller;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import pe.edu.pucp.sistemasInf.bean.Cliente;

/**
 *
 * @author Cesar
 */
public class MySQLDAOCliente implements DAOCliente{


   
  
    @Override
    public void add(Cliente c,String codUsuario,int codClientePadre) {
        Connection conn = null;
        PreparedStatement pstmt = null;
        //int result  = 0;
        try {
            //Paso 1: Registramos el driver
            DriverManager.registerDriver(new com.mysql.jdbc.Driver());
            //Paso 2: Obtenemos la conexión            
            conn = new DBConfig().getConnection();
            //Paso 3: Preparamos la sentencia
            pstmt = conn.prepareStatement(
                    "INSERT INTO cliente "+
                    "VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
            
            pstmt.setInt(1, c.getCod_Cliente());
            pstmt.setString(2, c.getRazon_Social());
            pstmt.setString(3, c.getRUC());
            pstmt.setString(4, c.getTelefono());
            pstmt.setString(5, c.getRubro());
            pstmt.setString(6, c.getDireccion1());
            pstmt.setString(7, c.getDireccion2());
            pstmt.setString(8, c.getNombre_contacto());
            pstmt.setString(9, c.getTlf_contacto());
            pstmt.setString(10, c.getAnexo_contacto());
            pstmt.setString(11, c.getEstado());
            pstmt.setString(12, c.getCuenta());
            pstmt.setString(13, codUsuario);
            
            if (codClientePadre!=-1)
                pstmt.setInt(14, codClientePadre);
            else
                pstmt.setNull(14, Types.INTEGER);
            
            pstmt.executeUpdate();
        } catch (SQLException ex) {
            Logger.getLogger(MySQLDAOCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally {
            try {//Paso 5: Cerramos la conexión
            conn.close(); } catch(Exception g) {g.printStackTrace();}
        }
    }

    @Override
    public void update(Cliente c) {
        
        Connection conn = null;
        PreparedStatement pstmt = null;        
        //int result  = 0;
        try {
            //Paso 1: Registramos el driver
            DriverManager.registerDriver(new com.mysql.jdbc.Driver());
            //Paso 2: Obtenemos la conexión            
            conn = new DBConfig().getConnection();
            //Paso 3: Preparamos la sentencia  
            
            //insert into Cliente (`cod_cliente`, `razon_social`, `ruc`, `telefono`, `rubro`, `direccion1`,`direccion2`,`nombre_contacto`,`tlf_contacto`,`anexo_contacto`, `estado`,`cuenta`,`cod_usuario`) 
            pstmt = conn.prepareStatement(
                    "UPDATE Cliente SET "
                    + " telefono = ?, rubro=?, direccion1=?, direccion2=? ,nombre_contacto = ?,tlf_contacto = ?,anexo_contacto = ?,estado=?,cuenta=?"
                    + " where employee_id = ?");
            pstmt.setString(1, c.getTelefono());
            pstmt.setString(2, c.getRubro());
            pstmt.setString(3, c.getDireccion1());
            pstmt.setString(4, c.getDireccion2());
            pstmt.setString(5, c.getNombre_contacto());
            pstmt.setString(6, c.getTlf_contacto());
            pstmt.setString(7, c.getAnexo_contacto());
            pstmt.setString(8, c.getEstado());
            pstmt.setString(9, c.getCuenta());
            pstmt.setInt(10, c.getCod_Cliente());   
            pstmt.executeUpdate();
            
        } catch (SQLException ex) {
            Logger.getLogger(MySQLDAOCliente.class.getName()).log(Level.SEVERE, null, ex);
         } finally {
            try {//Paso 5: Cerramos la conexión
            conn.close(); } catch(Exception f) {f.printStackTrace();}
        }
    
    
    }

    @Override
    public Cliente queryClienteByRUC(String ruc) {
        
        
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs=null;
        Cliente clientes=null;
        
        try {
            //Paso 1: Registramos el driver
            DriverManager.registerDriver(new com.mysql.jdbc.Driver());
            //Paso 2: Obtenemos la conexión            
            conn = new DBConfig().getConnection();
            //Paso 3: Preparamos la sentencia
            pstmt = conn.prepareStatement(
                    "SELECT * FROM cliente WHERE ruc =?");
            pstmt.setString(1, ruc);
            rs=pstmt.executeQuery();
            
            if (rs!=null)
            {
                clientes=new Cliente();
                while (rs.next())
                {
                    clientes.setCod_Cliente(rs.getInt("cod_cliente"));
                    clientes.setRazon_Social(rs.getString("razon_social"));
                    clientes.setRUC(rs.getString("ruc"));
                    clientes.setTelefono(rs.getString("telefono"));
                    clientes.setRubro(rs.getString("rubro"));
                    clientes.setDireccion1(rs.getString("direccion1"));
                    clientes.setDireccion2(rs.getString("direccion2"));
                    clientes.setNombre_contacto(rs.getString("nombre_contacto"));
                    clientes.setTlf_contacto(rs.getString("tlf_contacto"));
                    clientes.setAnexo_contacto(rs.getString("anexo_contacto"));
                    clientes.setEstado(rs.getString("estado"));
                    clientes.setCuenta(rs.getString("cuenta"));
                }
            }
            
        } catch (SQLException ex) {
            Logger.getLogger(MySQLDAOCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally {
            try {//Paso 5: Cerramos la conexión
            conn.close(); } catch(Exception g) {g.printStackTrace();}
        }
        
        return clientes;
    }

    @Override
    public Cliente queryClienteByCodigo() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void addClienteHijo() {

         
         
         
         
         
    }
    
    
    
    
    @Override
    public ArrayList<Cliente> queryAllCliente() {
        
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs=null;
        ArrayList<Cliente> listaClientes=null;
        
        try {
            //Paso 1: Registramos el driver
            DriverManager.registerDriver(new com.mysql.jdbc.Driver());
            //Paso 2: Obtenemos la conexión            
            conn = new DBConfig().getConnection();
            //Paso 3: Preparamos la sentencia
            pstmt = conn.prepareStatement(
                    "SELECT * FROM cliente WHERE cod_cliente_pertenece IS NULL");
            rs=pstmt.executeQuery();
            
            if (rs!=null)
            {
                listaClientes=new ArrayList<>();
                while (rs.next())
                {
                    Cliente c=new Cliente();
                    c.setCod_Cliente(rs.getInt("cod_cliente"));
                    c.setRazon_Social(rs.getString("razon_social"));
                    c.setRUC(rs.getString("ruc"));
                    c.setTelefono(rs.getString("telefono"));
                    c.setRubro(rs.getString("rubro"));
                    c.setDireccion1(rs.getString("direccion1"));
                    c.setDireccion2(rs.getString("direccion2"));
                    c.setNombre_contacto(rs.getString("nombre_contacto"));
                    c.setTlf_contacto(rs.getString("tlf_contacto"));
                    c.setAnexo_contacto(rs.getString("anexo_contacto"));
                    c.setEstado(rs.getString("estado"));
                    c.setCuenta(rs.getString("cuenta"));
                    listaClientes.add(c);
                }
            }
            
        } catch (SQLException ex) {
            Logger.getLogger(MySQLDAOCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally {
            try {//Paso 5: Cerramos la conexión
            conn.close(); } catch(Exception g) {g.printStackTrace();}
        }
        
        return listaClientes;
    }
    
    @Override
    public ArrayList<Cliente> queryClienteHijos(int codClientePadre) {
        
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs=null;
        ArrayList<Cliente> listaClientes=null;
        
        try {
            //Paso 1: Registramos el driver
            DriverManager.registerDriver(new com.mysql.jdbc.Driver());
            //Paso 2: Obtenemos la conexión            
            conn = new DBConfig().getConnection();
            //Paso 3: Preparamos la sentencia
            pstmt = conn.prepareStatement(
                    "SELECT * FROM cliente WHERE cod_cliente_pertenece=?");
            pstmt.setInt(1,codClientePadre);
            rs=pstmt.executeQuery();
            
            if (rs!=null)
            {
                listaClientes=new ArrayList<>();
                while (rs.next())
                {
                    Cliente c=new Cliente();
                    c.setCod_Cliente(rs.getInt("cod_cliente"));
                    c.setRazon_Social(rs.getString("razon_social"));
                    c.setRUC(rs.getString("ruc"));
                    c.setTelefono(rs.getString("telefono"));
                    c.setRubro(rs.getString("rubro"));
                    c.setDireccion1(rs.getString("direccion1"));
                    c.setDireccion2(rs.getString("direccion2"));
                    c.setNombre_contacto(rs.getString("nombre_contacto"));
                    c.setTlf_contacto(rs.getString("tlf_contacto"));
                    c.setAnexo_contacto(rs.getString("anexo_contacto"));
                    c.setEstado(rs.getString("estado"));
                    c.setCuenta(rs.getString("cuenta"));
                    listaClientes.add(c);
                }
            }
            
        } catch (SQLException ex) {
            Logger.getLogger(MySQLDAOCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally {
            try {//Paso 5: Cerramos la conexión
            conn.close(); } catch(Exception g) {g.printStackTrace();}
        }
        
        return listaClientes;
    }


    @Override
    public Cliente queryClienteByCod(int cod) {
         Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs=null;
        Cliente clientes=null;
        
        try {
            //Paso 1: Registramos el driver
            DriverManager.registerDriver(new com.mysql.jdbc.Driver());
            //Paso 2: Obtenemos la conexión            
            conn = new DBConfig().getConnection();
            //Paso 3: Preparamos la sentencia
            pstmt = conn.prepareStatement(
                    "SELECT * FROM cliente WHERE cod_cliente =?");
            pstmt.setInt(1, cod);
            rs=pstmt.executeQuery();
            
            if (rs!=null)
            {
                clientes=new Cliente();
                while (rs.next())
                {
                    clientes.setCod_Cliente(rs.getInt("cod_cliente"));
                    clientes.setRazon_Social(rs.getString("razon_social"));
                    clientes.setRUC(rs.getString("ruc"));
                    clientes.setTelefono(rs.getString("telefono"));
                    clientes.setRubro(rs.getString("rubro"));
                    clientes.setDireccion1(rs.getString("direccion1"));
                    clientes.setDireccion2(rs.getString("direccion2"));
                    clientes.setNombre_contacto(rs.getString("nombre_contacto"));
                    clientes.setTlf_contacto(rs.getString("tlf_contacto"));
                    clientes.setAnexo_contacto(rs.getString("anexo_contacto"));
                    clientes.setEstado(rs.getString("estado"));
                    clientes.setCuenta(rs.getString("cuenta"));
                }
            }
            
        } catch (SQLException ex) {
            Logger.getLogger(MySQLDAOCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally {
            try {//Paso 5: Cerramos la conexión
            conn.close(); } catch(Exception g) {g.printStackTrace();}
        }
        
        return clientes;
  
    }



    @Override
    public ArrayList<Cliente> queryClienteUser(String nameUser) {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs=null;
        ArrayList<Cliente> listaClientes=null;
        
        try {
            //Paso 1: Registramos el driver
            DriverManager.registerDriver(new com.mysql.jdbc.Driver());
            //Paso 2: Obtenemos la conexión            
            conn = new DBConfig().getConnection();
            //Paso 3: Preparamos la sentencia
            pstmt = conn.prepareStatement(
                    "SELECT * FROM cliente WHERE cod_usuario=?");
            pstmt.setString(1,nameUser);
            rs=pstmt.executeQuery();
            
            if (rs!=null)
            {
                listaClientes=new ArrayList<>();
                while (rs.next())
                {
                    Cliente c=new Cliente();
                    c.setCod_Cliente(rs.getInt("cod_cliente"));
                    c.setRazon_Social(rs.getString("razon_social"));
                    c.setRUC(rs.getString("ruc"));
                    c.setTelefono(rs.getString("telefono"));
                    c.setRubro(rs.getString("rubro"));
                    c.setDireccion1(rs.getString("direccion1"));
                    c.setDireccion2(rs.getString("direccion2"));
                    c.setNombre_contacto(rs.getString("nombre_contacto"));
                    c.setTlf_contacto(rs.getString("tlf_contacto"));
                    c.setAnexo_contacto(rs.getString("anexo_contacto"));
                    c.setEstado(rs.getString("estado"));
                    c.setCuenta(rs.getString("cuenta"));
                    listaClientes.add(c);
                }
            }
            
        } catch (SQLException ex) {
            Logger.getLogger(MySQLDAOCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally {
            try {//Paso 5: Cerramos la conexión
            conn.close(); } catch(Exception g) {g.printStackTrace();}
        }
        
        return listaClientes;
    }

    
    
}
